{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import sys \n",
    "\n",
    "# Modify the path \n",
    "sys.path.append(\"..\")\n",
    "\n",
    "import pandas as pd\n",
    "import yellowbrick as yb\n",
    "import matplotlib.pyplot as plt "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n3Xftz0VgYKDZtGmTOXnypKlZs6aJi4u76feNMWb27NmmUaNGplOnTqZt27bG39/f9OrVy3z00Uf2\n+1x9vt577z3Ts2dPk5mZadLT081zzz1nIiMjjTHGdO/e3SxbtswYY8yPP/5o6tWrZ95//31z4cIF\n07ZtW3Py5En7NmnevLk5ffq0WbRokXnllVdumeuq559/3nz00Uf5vg5ut71uN3327NkmKirKGHPl\n38s777xj3xZXp0dERJht27YZY4y5fPmyiYiIMJs3b77j9pR7m/bUpUi5urqSl5d3x/s1bNjQ/vOO\nHTtYsWIFLi4ueHp6Ehoayr///W/69u1L7dq1ee6552jevDnNmzenSZMm5OXl3XL6rbKEhoby/vvv\n06hRIzZu3Ejz5s0pX748AEOHDmX37t0sXLiQn3/+mXPnzl23932t8+fPk5CQQOfOne35/fz8AKhc\nuTJTp07lww8/5Pjx43z77bekp6fn+/h37NjB4MGD8fDwAK58LjtgwAD7/KuH/CtUqED58uVJSUnh\noYceum4ZtWvX5uOPP+b7778nLi6O3bt3M3/+fGbNmkWDBg04cuQI3bp1A6BixYp8+umn/Pjjj2Rm\nZtK2bVv78tu2bcvOnTtp1KgRFStWpHLlygDs3r2bc+fO0atXL/s6XVxcOHHiBG3atCEyMpKDBw/S\npEkTRo8ejavr7U/hycjI4JtvvuHdd98FoHTp0nTp0oUdO3ZQr1493N3dqV+//m1//+rh96ysLCZM\nmMAPP/xA8+bNb7rfnj176NixI56ennh6ehIYGEhCQgIpKSkcPHiQpUuXAuDr60vjxo0BOHDgAL/8\n8st129/FxYWEhARcXV3tn53fSX6vg9ttr7vdjtduz7i4OFJSUpg1a5Z92pEjR6hbt+4dt6fcu3Si\nnBSpunXrcuzYMdLS0q6bnpSUxAsvvMDly5eBK4fkr7rxTUBeXh45OTm4urqydOlSJk+ejI+PD5Mm\nTSImJua2028lODiYL774grS0NFavXs3zzz9vn/faa6+xevVqKleuTK9evXjsscdu+wf86uH7a+e7\nu195z/z9998TGhpKWloaTZs2pW/fvnfcTrd6zNnZ2fbb134E4OLiclOunJwcxowZQ0pKCnXq1OEf\n//gH77zzDv3792fVqlX2bFdzAxw7dozc3NybshhjyMnJAW5+Xpo0acKGDRvs/61evRo/Pz9atGjB\n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\ngwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import RidgeClassifier\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from yellowbrick.model_selection import CVScores\n",
    "\n",
    "\n",
    "room = pd.read_csv('data/occupancy/occupancy.csv')\n",
    "\n",
    "features = [\"temperature\", \"relative humidity\", \"light\", \"C02\", \"humidity\"]\n",
    "\n",
    "# Extract the numpy arrays from the data frame\n",
    "X = room[features].values\n",
    "y = room.occupancy.values\n",
    "\n",
    "# Create a cross-validation strategy\n",
    "cv = StratifiedKFold(12)\n",
    "\n",
    "# Create the cv score visualizer\n",
    "oz = CVScores(RidgeClassifier(), cv=cv)\n",
    "\n",
    "oz.fit(X, y)\n",
    "oz.poof()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# yellowbrick.model_selection.cross_validation\n",
    "# Implements cross-validation score plotting for model selection.\n",
    "#\n",
    "# Author:   Prema Damodaran Roman\n",
    "# Created:  Wed June 6 2018 13:32:00 -0500\n",
    "# Author:   Rebecca Bilbro <bilbro@gmail.com>\n",
    "# Updated:  Fri Aug 10 13:15:43 2018 -0500\n",
    "#\n",
    "# ID: cross_validation.py [7f47800] pdamo24@gmail.com $\n",
    "\n",
    "\"\"\"\n",
    "Implements cross-validation score plotting for model selection.\n",
    "\"\"\"\n",
    "\n",
    "##########################################################################\n",
    "## Imports\n",
    "##########################################################################\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.ticker as ticker\n",
    "\n",
    "from yellowbrick.base import ModelVisualizer\n",
    "from sklearn.model_selection import cross_val_score\n",
    "\n",
    "\n",
    "##########################################################################\n",
    "## CVScores Visualizer\n",
    "##########################################################################\n",
    "\n",
    "class CVScores(ModelVisualizer):\n",
    "    \"\"\"\n",
    "    CVScores displays cross-validated scores as a bar chart, with the\n",
    "    average of the scores plotted as a horizontal line.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "\n",
    "    model : a scikit-learn estimator\n",
    "        An object that implements ``fit`` and ``predict``, can be a\n",
    "        classifier, regressor, or clusterer so long as there is also a valid\n",
    "        associated scoring metric.\n",
    "        Note that the object is cloned for each validation.\n",
    "\n",
    "    ax : matplotlib.Axes object, optional\n",
    "        The axes object to plot the figure on.\n",
    "\n",
    "    cv : int, cross-validation generator or an iterable, optional\n",
    "        Determines the cross-validation splitting strategy.\n",
    "        Possible inputs for cv are:\n",
    "\n",
    "        - None, to use the default 3-fold cross-validation,\n",
    "        - integer, to specify the number of folds.\n",
    "        - An object to be used as a cross-validation generator.\n",
    "        - An iterable yielding train/test splits.\n",
    "\n",
    "        See the scikit-learn `cross-validation guide <https://goo.gl/FS3VU6>`_\n",
    "        for more information on the possible strategies that can be used here.\n",
    "\n",
    "    scoring : string, callable or None, optional, default: None\n",
    "        A string or scorer callable object / function with signature\n",
    "        ``scorer(estimator, X, y)``.\n",
    "\n",
    "        See scikit-learn `cross-validation guide <https://goo.gl/FS3VU6>`_\n",
    "        for more information on the possible metrics that can be used.\n",
    "\n",
    "    kwargs : dict\n",
    "        Keyword arguments that are passed to the base class and may influence\n",
    "        the visualization as defined in other Visualizers.\n",
    "\n",
    "    Examples\n",
    "    --------\n",
    "\n",
    "    >>> from sklearn import datasets, svm\n",
    "    >>> iris = datasets.load_iris()\n",
    "    >>> clf = svm.SVC(kernel='linear', C=1)\n",
    "    >>> X = iris.data\n",
    "    >>> y = iris.target\n",
    "    >>> visualizer = CVScores(model=clf, cv=5, scoring='f1_macro')\n",
    "    >>> visualizer.fit(X,y)\n",
    "    >>> visualizer.poof()\n",
    "\n",
    "    Notes\n",
    "    -----\n",
    "\n",
    "    This visualizer is a wrapper for\n",
    "    `sklearn.model_selection.cross_val_score <https://goo.gl/4v7dfL>`_.\n",
    "\n",
    "    Refer to the scikit-learn\n",
    "    `cross-validation guide <https://goo.gl/FS3VU6>`_\n",
    "    for more details.\n",
    "\n",
    "    \"\"\"\n",
    "\n",
    "    def __init__(self, model, ax=None, cv=None, scoring=None, **kwargs):\n",
    "        super(CVScores, self).__init__(model, ax=ax, **kwargs)\n",
    "\n",
    "        self.cv = cv\n",
    "        self.scoring = scoring\n",
    "\n",
    "    def fit(self, X, y, **kwargs):\n",
    "        \"\"\"\n",
    "        Fits the learning curve with the wrapped model to the specified data.\n",
    "        Draws training and test score curves and saves the scores to the\n",
    "        estimator.\n",
    "\n",
    "        Parameters\n",
    "        ----------\n",
    "        X : array-like, shape (n_samples, n_features)\n",
    "            Training vector, where n_samples is the number of samples and\n",
    "            n_features is the number of features.\n",
    "\n",
    "        y : array-like, shape (n_samples) or (n_samples, n_features), optional\n",
    "            Target relative to X for classification or regression;\n",
    "            None for unsupervised learning.\n",
    "\n",
    "        Returns\n",
    "        -------\n",
    "        self : instance\n",
    "\n",
    "        \"\"\"\n",
    "\n",
    "        self.cv_scores_ = cross_val_score(\n",
    "            self.estimator, X, y, cv=self.cv, scoring=self.scoring\n",
    "        )\n",
    "        self.cv_scores_mean_ = self.cv_scores_.mean()\n",
    "\n",
    "        self.draw()\n",
    "        return self\n",
    "\n",
    "    def draw(self, **kwargs):\n",
    "        \"\"\"\n",
    "        Creates the bar chart of the cross-validated scores generated from the\n",
    "        fit method and places a dashed horizontal line that represents the\n",
    "        average value of the scores.\n",
    "        \"\"\"\n",
    "\n",
    "        color = kwargs.pop(\"color\", \"b\")\n",
    "        width = kwargs.pop(\"width\", 0.3)\n",
    "        linewidth = kwargs.pop(\"linewidth\", 1)\n",
    "\n",
    "        xvals = np.arange(1, len(self.cv_scores_) + 1, 1)\n",
    "        self.ax.bar(xvals, self.cv_scores_, width=width)\n",
    "        self.ax.axhline(\n",
    "            self.cv_scores_mean_, color=color,\n",
    "            label=\"Mean score = {:0.3f}\".format(self.cv_scores_mean_),\n",
    "            linestyle='--', linewidth=linewidth\n",
    "        )\n",
    "\n",
    "        return self.ax\n",
    "\n",
    "    def finalize(self, **kwargs):\n",
    "        \"\"\"\n",
    "        Add the title, legend, and other visual final touches to the plot.\n",
    "        \"\"\"\n",
    "\n",
    "        # Set the title of the figure\n",
    "        self.set_title('Cross Validation Scores for {}'.format(self.name))\n",
    "\n",
    "        # Add the legend\n",
    "        loc = kwargs.pop(\"loc\", \"best\")\n",
    "        edgecolor = kwargs.pop(\"edgecolor\", \"k\")\n",
    "        self.ax.legend(frameon=True, loc=loc, edgecolor=edgecolor)\n",
    "\n",
    "        # set spacing between the x ticks\n",
    "        self.ax.xaxis.set_major_locator(ticker.MultipleLocator(1))\n",
    "\n",
    "        # Set the axis labels\n",
    "        self.ax.set_xlabel('Training Instances')\n",
    "        self.ax.set_ylabel('Score')\n",
    "\n",
    "\n",
    "##########################################################################\n",
    "## Quick Method\n",
    "##########################################################################\n",
    "\n",
    "def cv_scores(model, X, y, ax=None, cv=None, scoring=None, **kwargs):\n",
    "    \"\"\"\n",
    "    Displays cross validation scores as a bar chart and the\n",
    "    average of the scores as a horizontal line\n",
    "\n",
    "    This helper function is a quick wrapper to utilize the\n",
    "    CVScores visualizer for one-off analysis.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "\n",
    "    model : a scikit-learn estimator\n",
    "        An object that implements ``fit`` and ``predict``, can be a\n",
    "        classifier, regressor, or clusterer so long as there is also a valid\n",
    "        associated scoring metric.\n",
    "        Note that the object is cloned for each validation.\n",
    "\n",
    "    X : array-like, shape (n_samples, n_features)\n",
    "        Training vector, where n_samples is the number of samples and\n",
    "        n_features is the number of features.\n",
    "\n",
    "    y : array-like, shape (n_samples) or (n_samples, n_features), optional\n",
    "        Target relative to X for classification or regression;\n",
    "        None for unsupervised learning.\n",
    "\n",
    "    ax : matplotlib.Axes object, optional\n",
    "        The axes object to plot the figure on.\n",
    "\n",
    "    cv : int, cross-validation generator or an iterable, optional\n",
    "        Determines the cross-validation splitting strategy.\n",
    "        Possible inputs for cv are:\n",
    "\n",
    "        - None, to use the default 3-fold cross-validation,\n",
    "        - integer, to specify the number of folds.\n",
    "        - An object to be used as a cross-validation generator.\n",
    "        - An iterable yielding train/test splits.\n",
    "\n",
    "    see the scikit-learn\n",
    "    `cross-validation guide <https://goo.gl/FS3VU6>`_\n",
    "    for more information on the possible strategies that can be used here.\n",
    "\n",
    "    scoring : string, callable or None, optional, default: None\n",
    "        A string or scorer callable object / function with signature\n",
    "        ``scorer(estimator, X, y)``.\n",
    "\n",
    "        See scikit-learn `cross-validation guide <https://goo.gl/FS3VU6>`_\n",
    "        for more information on the possible metrics that can be used.\n",
    "\n",
    "    kwargs : dict\n",
    "        Keyword arguments that are passed to the base class and may influence\n",
    "        the visualization as defined in other Visualizers.\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    ax : matplotlib.Axes\n",
    "        The axes object that the validation curves were drawn on.\n",
    "\n",
    "    \"\"\"\n",
    "\n",
    "    # Initialize the visualizer\n",
    "    visualizer = cv_scores(model, X, y, ax=ax, cv=cv, scoring=scoring)\n",
    "\n",
    "    # Fit and poof the visualizer\n",
    "    visualizer.fit(X, y)\n",
    "    visualizer.poof(**kwargs)\n",
    "    return visualizer.ax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nSV+bJyIiemXxIi1ERESSYXkTERFJhuVNREQkGZY3ERGRZFjeREREkmF5ExERSYblTUREJBmWNxER\nkWRY3kRERJJheRMREUmG5U1ERCQZljcREZFkWN5ERESSYXkTERFJhuVNREQkGZY3ERGRZFjeRERE\nkmF5ExERSYblTUREJBmWNxERkWRY3kRERJJheRMREUmG5U1ERCQZljcREZFkWN5ERESSYXkTERFJ\nhuVNREQkGZY3ERGRZFjeREREkmF5ExERSYblTUREJBmWNxERkWRY3kRERJJheRMREUmG5U1ERCQZ\nljcREZFkWN5ERESSYXkTERFJhuVNREQkGZY3ERGRZFjeREREkmF5ExERSYblTUREJBmWNxERkWRY\n3kRERJJheRMREUmG5U1ERCQZljcREZFkWN5ERESSMdHXijUaDYKDg3Hjxg2YmZkhLCwM9evX187/\n6aef8MUXX0AIgWbNmmHu3LlQKBT6ikNERPTK0NvI++jRo8jOzsa2bdvg7++PhQsXaudlZGRg0aJF\nWL16NbZv3w4bGxukpKToKwoREdErRW/lHR0dDRcXFwBAixYtcPXqVe28ixcvwt7eHhEREfDx8cEb\nb7wBa2trfUUhIiJ6pejttHlGRgaUSqX2sbGxMXJzc2FiYoKUlBScO3cOu3fvhqWlJXx9fdGiRQs0\naNBA5zqf/gWgLEVHRxtku8VhHt2YRzfm0a085SlPWQDmeZ6yzKO38lYqlVCpVNrHGo0GJiZPNmdl\nZYW33noL1atXBwC88847uHbt2nPL29HREebm5qUTcPPvJV60ZcuWpbNNXZhHN+bRjXl0kzRPmWQB\nylceSY8VULp51Gq1zgGr3k6bOzs748SJEwCAmJgY2Nvba+c1a9YMsbGxePjwIXJzc3Hp0iW8+eab\n+opCRET0StHbyLtbt244ffo0vL29IYRAeHg4NmzYAFtbW7i6usLf3x+jRo0CAPTo0aNAuRMREVHx\n9FbeRkZGCA0NLTDNzs5O+3XPnj3Rs2dPfW2eiIjolcWLtBAREUmG5U1ERCQZljcREZFkWN5ERESS\nYXkTERFJpsTlnZiYiB9//BF5eXlISEjQZyYiIiLSoUTlvX//fowdOxZhYWF49OgRvL29ERUVpe9s\nREREVIQSlfeXX36JLVu2QKlUolq1avjuu++wdu1afWcjIiKiIpSovI2MjArcZKRGjRowMuKfy4mI\n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\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "# Create a cross-validation strategy\n",
    "cv = StratifiedKFold(12)\n",
    "\n",
    "# Create the cv score visualizer\n",
    "oz = CVScores(\n",
    "    MultinomialNB(), cv=cv, scoring='f1_weighted'\n",
    ")\n",
    "\n",
    "oz.fit(X, y)\n",
    "oz.poof()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe8AAAFlCAYAAADComBzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xt8znXjx/H3tc0YFy2K5FAsI2k5\n5ZDmTG2MkcNMk3CHRA45mzmMHDqh26lU901OIdylHEo5hDRJ3A43iTncU2F2YKfr8/vDz3UbM6t2\n7dpXr+fj0aNd3+933+/7uq5tb5/vdV2fr80YYwQAACzDw90BAADA70N5AwBgMZQ3AAAWQ3kDAGAx\nlDcAABZDeQMAYDGUNywtIyND77//vtq3b6+2bdsqODhY06dPV2pqap5liI2NVbVq1RQXF3fTupCQ\nEG3YsCHb769cubLOnz+vL774QtHR0Vlu07p1a+3ateu2Ofr37y9JiouLU1hYWA7vwe0lJiZqzJgx\nCgkJUZs2bRQaGqqPPvoo1/afG+bMmaPGjRtr5MiRf3gfs2bNUr169dS2bVu1bdtWbdq0UdOmTfXq\nq6/q2qdq27Ztq0uXLt30vQsWLNCIESP+8LGB38PL3QGAP2PcuHGKj4/XP/7xDxUtWlTJycl65ZVX\nNHr0aE2fPj1PMpQrV04NGjTQqlWr1LdvX+fy77//XgkJCWrWrFmO9tOsWbMcb5uVM2fO6Pjx45Kk\nUqVKaenSpX94Xzd6/fXXVbhwYa1du1Y2m01xcXHq3LmzSpcurSeffDLXjvNnrFixQq+99ppq1679\np/YTHByssWPHOm/Hx8erTZs2evLJJxUYGKg1a9b82ajAn0Z5w7JiY2P1r3/9S9u2bZPdbpckFS5c\nWOPHj9f3338vSRoxYoQuXryo2NhYNW7cWH369NH48eN16NAh2Ww2BQYGavDgwfLy8tLMmTO1ceNG\nFShQQHfffbdeffVVlSxZ8pbLrxceHq7o6Gj16dNHNptNkrR8+XJ17txZnp6eOn78uCZMmKDk5GSd\nO3dOVapU0VtvvaWCBQs697Fq1SqtX79e8+bN09GjRzVq1ChdvnxZFStWVHJysnO7uXPnatOmTUpJ\nSdHly5c1fPhwNW3aVGPGjFFcXJx69uyp8ePHKyQkRN9//73S0tI0ZcoU7dixQ56engoICNDIkSNl\nt9vVtGlTtWvXTjt27NDZs2cVFBSkYcOG3fRY//LLLypRooTS0tLk7e2tUqVKadasWfL19ZUkHT9+\nXGPHjtX58+fl4eGhvn37Kjg4WP/5z380YcIEXbx4UTabTT169FBoaKh27dqlSZMmqXDhwkpOTtaK\nFSu0bds2zZkzR2lpaSpUqJCGDx+uGjVq6NixYxo9erRSU1NljFGHDh3UtWvXTPkGDhyouLg4jR49\nWi+//LJq1qypcePG6fTp0zLGKDQ0VL169dKpU6fUtWtX+fn56fTp01q4cOFNz+WNfv31V125ckV3\n3XWXpKtnSnbs2KGiRYsqOjpa33zzjUqUKKESJUqoaNGikqQTJ05o1KhRio+P17333itjjNq0aaP2\n7dtrz549eu2113T58mXZbDb1799fTZo0uf0PPHA9A1jU559/bp555plstxk+fLh57rnnnLeHDRtm\nJk6caBwOh0lJSTE9evQw8+bNM2fOnDE1a9Y0KSkpxhhjFixYYDZu3HjL5TfKyMgwzZo1Mzt37jTG\nGHPp0iXz+OOPm19//dUYY8yUKVPM6tWrjTHGpKammtatW5vPP//cGGOMv7+/+e2338zKlSvNCy+8\nYIwxpm3btmb58uXGGGO+++47U7lyZbNz505z6tQpExERYS5fvmyMMeaTTz4xrVu3NsYYs3PnTtOq\nVStjjDGxsbGmevXqxhhjZsyYYV566SWTmppqMjIyzIgRI0xkZKQxxpgmTZqYKVOmGGOM+e9//2se\nffRRc/LkyZvu38GDB03Lli1NjRo1TI8ePczbb79tfvrpJ+f60NBQs2jRImOMMWfOnDHNmjUzCQkJ\nplmzZmb9+vXO/QcGBpo9e/aYnTt3mipVqphTp04ZY4w5fvy4ad26tTl//rwxxpgjR46YBg0amKSk\nJDNy5Egzb948Y4wx586dMwMHDjQZGRk3ZWzSpInZt2+fMcaYrl27mvfee8/5XISEhJhPPvnExMbG\nGn9/f7N79+6bvt8YY2bOnGnq1q1r2rRpY1q2bGnq1Kljunfvbj777DPnNteerw8++MB069bNpKSk\nmKSkJNOuXTszfPhwY4wxnTp1Mh9++KExxpijR4+axx57zKxcudJcvHjRtGzZ0sTGxjofk4YNG5rT\np09nmQe4FUbesCwPDw85HI7bblerVi3n11u2bNGSJUtks9nk7e2tsLAw/eMf/1CvXr1UpUoVtWvX\nTg0bNlTDhg1Vv359ORyOLJdnlSUsLEwrV65U3bp1tXbtWjVs2FAlSpSQJA0dOlTbt2/XO++8o59/\n/lnnzp3LNJq+3oULF3T48GGFhoY681eqVEmSVKZMGU2dOlX/+te/dOLECf3www9KSkrK9v5v2bJF\ngwYNUoECBSRJERER6tevn3P9tVP1pUqVUokSJRQfH69y5cpl2keVKlX0+eef68CBA9q9e7e2b9+u\nuXPnasaMGapZs6YOHTqkjh07SpJKly6tTZs26ejRo0pJSVHLli2d+2/ZsqW2bt2qunXrqnTp0ipT\npowkafv27Tp37py6d+/uPKbNZtPJkyfVokULDR8+XPv27VP9+vU1ZswYeXjc+u06ycnJ2rNnj957\n7z1JUtGiRdW+fXtt2bJFjz32mLy8vFS9evVbfv+10+apqamaOHGi/vOf/6hhw4Y3bbdjxw61bt1a\n3t7e8vb2VkhIiA4fPqz4+Hjt27dPixYtkiT5+fmpXr16kqS9e/fql19+yfT422w2HT58WPfff/8t\nMwE34g1rsKyAgAD99NNPSkxMzLQ8Li5OL7zwgq5cuSLp6qn0a24se4fDofT0dHl4eGjRokV69dVX\n5evrq8mTJys6OvqWy7PyzDPP6Ouvv1ZiYqKWL1+uZ5991rlu8ODBWr58ucqUKaPu3bvrkUcecb4B\n6kbXTrtfv97L6+q/sw8cOKCwsDAlJiaqQYMG6tWr120fp6zuc1pamvP29afubTbbTbnS09MVGRmp\n+Ph4VatWTc8//7zeffdd9e3bV8uWLXNmu5Zbkn766SdlZGTclMUYo/T0dEk3Py/169fXmjVrnP8t\nX75clSpVUpMmTbR+/XoFBQXp4MGDCgkJ0cmTJ7O9vzfeh2vPsyR5e3s7M2fH29tbkZGRSkpKytH7\nJzw9PTP9//oM15ZlZGTIz88v0/1ctmxZvnnfAKyD8oZllSpVSiEhIRo1apSzwBMTEzVu3Dj5+vqq\nUKFCN33Pk08+qQ8//FDGGKWmpmr58uV64okndOjQIbVu3Vp+fn7q3bu3unfvrsOHD99yeVbuvvtu\nNWnSRDNnzpSnp2em0d22bdvUr18/BQcHy2az6Ycffsiy3CTJ19dXjzzyiPPd3AcOHNCRI0ckSbt3\n73YWaJ06dfTFF1849+Pp6ZmplK8JDAzU0qVLlZaWJofDoQ8//FANGjTI8ePs5eWln3/+WbNnz3bu\n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\noDHGOSlWkSJFlJCQ4LYs5cqV02OPPZZnx79dnmuDhj179mjRokXq3r17nmeivPOps2fPqlu3bmrb\ntq3by/KaqVOnav369YqMjFRycrLbcqxcuVLffPONIiIidPDgQQ0fPly//PKL2/JUqFBBbdq0kc1m\nU4UKFeTr6+vWPL6+vnryySfl7e2tihUrqmDBgjp//rzb8kjSpUuXdPz4cdWrV8+tOSTpgw8+0JNP\nPqn169drzZo1GjFiRJ7NIZ6VZ555Rna7XeHh4dq4caMeeeQRt59tk65OjnVNUlJSvjjjlp+sW7dO\nUVFRmj9/vooXL57nx6e886Fff/1VPXr00NChQ9WhQwd3x9Hq1as1b948SZKPj49sNlumX+y89uGH\nH2rRokVauHChHn74YU2dOlX33nuv2/KsWLFCU6ZMkSTFxcUpMTHRrXlq1aqlrVu3yhijuLg4Xb58\nWb6+vm7LI0m7d+9W/fr13ZrhmmLFijlnbLzrrruUnp7ulpHuNT/++KPq16+vJUuW6Omnn1a5cuXc\nluV6VatW1a5duyRJW7ZsUe3atd2cKP9Ys2aN82+Qu56v/HGeGJnMnTtXly5d0uzZszV79mxJ0jvv\nvJPtVHmu1LJlS40cOVJdu3ZVenq6Ro0a5bYs+VGHDh00cuRIdenSRTabTZMnT3brSzBNmjTR7t27\n1aFDBxljNHbsWLeP5I4fP66yZcu6NcM13bt316hRoxQeHq60tDQNGjRIhQsXdlueBx54QDNmzNDc\nuXNVtGhRTZo0yW1Zrjd8+HBFRkbqjTfeUMWKFZkF8/9lZGRo0qRJKl26tPr37y9JevzxxzVgwIA8\nzcEMawAAWAynzQEAsBjKGwAAi6G8AQCwGMobAACLobwBALAYyhvIQ+PHj1fbtm0VHBysatWqqW3b\ntmrbtq1WrlyZ433MmDHjtherya1pJCtXrvyHvm/ZsmX65JNPciUDgJvxUTHADU6dOqVu3brpyy+/\ndHeUbFWuXFmHDx/+3d83YsQI1alTR+3bt3dBKgBM0gLkE7NmzdLevXt19uxZde3aVZUqVdKbb76p\nK1euKD4+XkOHDlVQUJCzGOvUqaOXXnpJlSpV0sGDB1WiRAnNmDFDvr6+ztKdNWuW4uLidOLECZ0+\nfVodO3ZU3759lZaWpqioKMXExKhUqVKy2Wx68cUXVbdu3Syz7dq1S/PmzVOhQoV07NgxVa5cWa+9\n9ppSU1M1ePBg5yUR+/XrJx8fH3355ZfauXOn7r33XpUqVUoTJ05UcnKyzp8/r+eff17dunW7ZbaU\nlBSNHz9eMTExKlCggF588UUFBwdr3759evXVV3XlyhXdfffdGj9+vMqVK6f3339fH3/8sTw8PBQQ\nEKAJEybk5dMGuAXlDeQjqampWrdunSRpwIABio6Olp+fn3bs2KHJkycrKCgo0/aHDh3S5MmTVbVq\nVfXv31//+te/brrQxuHDh/Xhhx8qISFBzZs3V9euXbVmzRpdvnxZn3/+uc6cOZOj+fO///57ffbZ\nZypZsqQ6deqkbdu2KT4+XmXKlNH8+fN17NgxrVixQsOHD1fTpk1Vp04dBQYGatKkSXrxxRdVv359\nxcbGqk2bNurWrdstsy1fvlzJycn67LPP9Ntvv6l79+5q3ry5xowZo7lz5+r+++/X1q1bFRkZqXff\nfVfz5s3T1q1b5enpqfHjxysuLk6lSpXKpWcEyJ8obyAfCQgIcH49ffp0bd68WZ9//rl++OEHJSUl\n3bR9iRIlVLVqVUlSpUqVFB8ff9M2devWlbe3t0qUKCFfX18lJCRo+/bt6tSpk2w2m8qUKZOjeccr\nVaqk++67T5Lk5+en+Ph41ahRQ2+88Ybi4uLUuHHjLK8aNmLECG3dulXz5s3T4cOHM13UJqtsu3fv\nVqdOneTh4aF7771Xn376qY4cOaLY2Fj17dvX+b3XLudZo0YNdejQQc2aNVPXrl0pbvwl8IY1IB+5\nfs748PBw7du3T9WqVVOfPn2y3P766wjbbLYsL/2Z1Taenp5yOBy/K1tW+3nwwQf12WefKSQkRN99\n951zPvXrDRw4UBs3bpSfn58GDRp0233eOC/8iRMn5HA4VLZsWa1Zs0Zr1qzRqlWrtHjxYknS7Nmz\nNW7cOBlj1KtXL3377be/634BVkR5A/nQxYsX9fPPP+vll19Wo0aNtH379ly98tUTTzyhdevWOa88\n9u233zqv3fx7LFq0SLNmzVJQUJCioqJ0/vx5JSQkyNPT05l3+/btGjBggJo3b67du3dLUrb35fHH\nH9dnn30mY4x+++03PfvssypTpozi4+P13XffSbp6WdhXXnlF58+fV1BQkPz9/fXyyy+rQYMGf+gN\ndoDVcNocyId8fX3VsWNHtWrVSna7XdWrV9eVK1dy7TrqnTp10qFDhxQSEqJ7771X999//x+6Ulxo\naKgGDx6skJAQeXl56aWXXlKxYsX0xBNP6I033lDRokXVv39/hYeHq1ixYqpQoYLKlCmjU6dO3XKf\n4eHhio6OVps2bSRJkZGRKlq0qGbMmKFJkyYpJSVFdrtdU6dOVfHixRUWFqYOHTrIx8dHpUuXVrt2\n7f7w4wJYBR8VA/6CvvrqKxlj1KRJEyUkJCg0NFQrV650+3W/AeQM5Q38BcXGxmrYsGHOkXyPHj1y\nbWIXAK5HeQMAYDG8YQ0AAIuhvAEAsBjKGwAAi6G8AQCwGMobAACLobwBALCY/wP2IqH5OK1Q6wAA\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x396 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "from sklearn.model_selection import KFold\n",
    "\n",
    "energy = pd.read_csv('data/energy/energy.csv')\n",
    "\n",
    "targets = [\"heating load\", \"cooling load\"]\n",
    "features = [col for col in energy.columns if col not in targets]\n",
    "\n",
    "X = energy[features]\n",
    "y = energy[targets[1]]\n",
    "\n",
    "cv = KFold(12)\n",
    "\n",
    "oz = CVScores(\n",
    "    Ridge(), cv=cv, scoring='r2'\n",
    ")\n",
    "\n",
    "oz.fit(X, y)\n",
    "oz.poof()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
